ModelForm এর মাধ্যমে মডেল ডেটা হ্যান্ডলিং

Web Development - জ্যাঙ্গো (Django) - Django Form Handling এবং Validation
172

Django এর ModelForm একটি শক্তিশালী টুল, যা আপনাকে Django মডেল (Model) থেকে সরাসরি HTML ফর্ম তৈরি এবং ডেটা পরিচালনা করতে সাহায্য করে। ModelForm এর মাধ্যমে আপনি দ্রুত এবং নিরাপদভাবে ডেটাবেসে ডেটা সন্নিবেশ, আপডেট বা মুছতে পারেন, এবং ব্যবহারকারীর ইনপুট সহজে যাচাই (validation) করতে পারেন।


ModelForm কী?

ModelForm হল Django এর একটি ফিচার, যা আপনাকে Django মডেলের জন্য একটি ফর্ম তৈরি করতে সাহায্য করে। এর মাধ্যমে আপনি মডেলের ডেটা সম্পূর্ণভাবে ফর্মের মাধ্যমে ইনপুট নিতে পারেন এবং সেই ডেটা মডেলে সেভ করতে পারেন। ModelForm সাধারণত মডেলের উপর ভিত্তি করে ফর্ম ফিল্ড তৈরি করে এবং মডেলের ডেটা ইনপুট গ্রহণের জন্য প্রয়োজনীয় ডেটা ভ্যালিডেশনও করে।


ModelForm তৈরি করার ধাপ

১. ModelForm ক্লাস তৈরি করা

প্রথমে, আপনি একটি ModelForm ক্লাস তৈরি করবেন, যা আপনার মডেলের উপর ভিত্তি করে ফর্ম তৈরি করবে।

ধরা যাক, আপনার একটি Post মডেল রয়েছে, যা একটি ব্লগ পোস্টের তথ্য ধারণ করে।

Post মডেল:
from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.CharField(max_length=100)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

এখন আমরা Post মডেলের জন্য একটি ModelForm তৈরি করবো।

PostModelForm:
from django import forms
from .models import Post

class PostModelForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content', 'author']

এখানে, PostModelForm একটি ModelForm ক্লাস, যেটি Post মডেলটি ব্যবহার করে। fields অ্যাট্রিবিউটে আমরা যেসব ফিল্ডকে ফর্মে অন্তর্ভুক্ত করতে চাই, সেগুলো উল্লেখ করি। এখানে title, content, এবং author ফিল্ডগুলোকে ফর্মে অন্তর্ভুক্ত করা হয়েছে।


ModelForm এর মাধ্যমে ডেটা হ্যান্ডলিং

২. ফর্মে ডেটা ইনপুট করা

একটি HTML ফর্ম তৈরি করতে, আপনি PostModelForm ফর্ম ব্যবহার করতে পারেন। Django টেমপ্লেট ব্যবহার করে ফর্মটি রেন্ডার করা যাবে।

টেমপ্লেট:
<form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Submit</button>
</form>

এখানে, {% csrf_token %} ট্যাগটি CSRF নিরাপত্তা জন্য প্রয়োজনীয়। {{ form.as_p }} ফর্মটি প্যারাগ্রাফ আকারে রেন্ডার করবে, যাতে প্রতিটি ফর্ম ফিল্ড আলাদা প্যারাগ্রাফে প্রদর্শিত হয়।

৩. ভিউতে ModelForm এর মাধ্যমে ডেটা সেভ করা

ভিউতে ফর্মের ডেটা প্রক্রিয়া করতে এবং সেভ করতে আপনি POST রিকোয়েস্ট যাচাই করবেন এবং ফর্মটি সেভ করবেন।

views.py:
from django.shortcuts import render, redirect
from .forms import PostModelForm

def create_post(request):
    if request.method == 'POST':
        form = PostModelForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('post_list')  # পোস্ট তৈরি হলে পোস্টের তালিকা পেজে রিডিরেক্ট করবে
    else:
        form = PostModelForm()

    return render(request, 'create_post.html', {'form': form})

এখানে, আমরা প্রথমে চেক করি যে রিকোয়েস্টটি POST কিনা। যদি POST হয়, তাহলে ফর্মের ডেটা নেয়া হয় এবং ফর্মটি যাচাই করা হয় (form.is_valid())। যদি ফর্মটি বৈধ হয়, তাহলে ডেটা মডেলে সেভ করা হয় (form.save()) এবং তারপর একটি নতুন পেজে রিডিরেক্ট করা হয়।


ModelForm এ ভ্যালিডেশন

ModelForm এর মাধ্যমে আপনি ডেটা ভ্যালিডেশন খুব সহজে করতে পারেন। Django ফর্মের জন্য কিছু ডিফল্ট ভ্যালিডেশন প্রদান করে, তবে আপনি নিজেও কাস্টম ভ্যালিডেশন তৈরি করতে পারেন।

৪. কাস্টম ভ্যালিডেশন:

ধরা যাক, আপনি চান যে title ফিল্ডের দৈর্ঘ্য অবশ্যই 10 এর বেশি হতে হবে, তবে আপনি ModelForm এ একটি কাস্টম ক্লিনিং মেথড যোগ করতে পারেন।

class PostModelForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content', 'author']

    def clean_title(self):
        title = self.cleaned_data.get('title')
        if len(title) < 10:
            raise forms.ValidationError('Title must be at least 10 characters long.')
        return title

এখানে, clean_title মেথডটি title ফিল্ডের জন্য কাস্টম ভ্যালিডেশন পরিচালনা করছে। যদি title ফিল্ডের দৈর্ঘ্য 10 এর কম হয়, তাহলে এটি একটি ValidationError ছুড়ে দিবে।


ModelForm ব্যবহার করে মডেল ডেটা আপডেট করা

ModelForm কেবল নতুন ডেটা তৈরি করতে নয়, বরং বিদ্যমান ডেটা আপডেট করতেও ব্যবহৃত হতে পারে। যখন আপনি একটি বিদ্যমান রেকর্ড এডিট করবেন, তখন শুধু সেই রেকর্ডটি ফর্মে প্রেরণ করতে হবে।

উদাহরণ:

from django.shortcuts import get_object_or_404

def edit_post(request, post_id):
    post = get_object_or_404(Post, id=post_id)
    if request.method == 'POST':
        form = PostModelForm(request.POST, instance=post)
        if form.is_valid():
            form.save()
            return redirect('post_list')
    else:
        form = PostModelForm(instance=post)

    return render(request, 'edit_post.html', {'form': form})

এখানে, instance=post অংশটি বিদ্যমান post রেকর্ডটি ফর্মে লোড করার জন্য ব্যবহার করা হয়েছে, যাতে আপনি সেটি আপডেট করতে পারেন।


সারাংশ

Django এর ModelForm ব্যবহার করে মডেল ডেটা হ্যান্ডলিং খুব সহজ এবং দ্রুত হতে পারে। এটি আপনাকে ডেটাবেসের ডেটা ম্যানিপুলেট করতে সাহায্য করে এবং স্বয়ংক্রিয়ভাবে ডেটা ভ্যালিডেশনও করে। ModelForm দিয়ে আপনি নতুন ডেটা তৈরি, বিদ্যমান ডেটা আপডেট এবং ডিলিট করতে পারেন, এবং সবকিছু Django এর ORM এর মাধ্যমে সহজে ম্যানেজ করতে পারেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...